#include <iostream>
#include <string>
#include <sstream>
#include "engcomp_glib.h"

using namespace std;

#include "TileEngine.h"

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	Default constructor. </summary>
///
/// <remarks>	Tulio, 24/05/2010. </remarks>
////////////////////////////////////////////////////////////////////////////////////////////////////

Tiles::Tiles(void)
:additionalCost(0)
{
	inOpen = false;
	inClosed = false;
	cost = 0;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	Destructor. </summary>
///
/// <remarks>	Tulio, 24/05/2010. </remarks>
////////////////////////////////////////////////////////////////////////////////////////////////////

Tiles::~Tiles(void)
{
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	Sets a tile. </summary>
///
/// <remarks>	Tulio, 24/05/2010. </remarks>
///
/// <param name="num_tile">	Tile sprite index in TileCache. </param>
/// <param name="largura">	Set tile's width. </param>
/// <param name="altura">	Set tiles's height. </param>
////////////////////////////////////////////////////////////////////////////////////////////////////

void Tiles::setTile(int num_tile, int largura, int altura)
{
	sprite = num_tile;
	lar = largura;
	alt = altura;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	Define if tile is walkable. </summary>
///
/// <remarks>	Tulio, 24/05/2010. </remarks>
///
/// <param name="bw">	true if tile is walkable, false if is not. </param>
////////////////////////////////////////////////////////////////////////////////////////////////////

void Tiles::setWalk(bool bw)
{
	walkable = bw;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	TODO: Sets an information. </summary>
///
/// <remarks>	Tulio, 24/05/2010. </remarks>
///
/// <param name="inf">	The inf. </param>
////////////////////////////////////////////////////////////////////////////////////////////////////

void Tiles::setInfo(int inf)
{
	info = inf;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	Gets the information. </summary>
///
/// <remarks>	Tulio, 24/05/2010. </remarks>
///
/// <returns>	The information. </returns>
////////////////////////////////////////////////////////////////////////////////////////////////////

int Tiles::getInfo()
{
	return info;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	Gets if tile is walkable. </summary>
///
/// <remarks>	Tulio, 24/05/2010. </remarks>
///
/// <returns>	true if tile is wakable, false if it is not. </returns>
////////////////////////////////////////////////////////////////////////////////////////////////////

bool Tiles::getWalk()
{
	return walkable;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	Gets the tile's sprite index in TileCache. </summary>
///
/// <remarks>	Tulio, 24/05/2010. </remarks>
///
/// <returns>	The TileCache sprite index. </returns>
////////////////////////////////////////////////////////////////////////////////////////////////////

int Tiles::getTileN()
{
	return sprite;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	Get tile's x map coordinate. </summary>
///
/// <remarks>	Tulio, 24/05/2010. </remarks>
///
/// <returns>	The x coordinate. </returns>
////////////////////////////////////////////////////////////////////////////////////////////////////

int Tiles::getX()
{
	return posx;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	Get tile'a y map coordinate. </summary>
///
/// <remarks>	Tulio, 24/05/2010. </remarks>
///
/// <returns>	The y coordinate. </returns>
////////////////////////////////////////////////////////////////////////////////////////////////////

int Tiles::getY()
{
	return posy;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	Sets an additional cost of movement through tile. Use when you need to penalize terrain movement. </summary>
///
/// <remarks>	Tulio, 08/06/2010. </remarks>
///
/// <param name="addToTileCost">	The additional cost to tile cost. </param>
////////////////////////////////////////////////////////////////////////////////////////////////////

void Tiles::setAdditionalCost(int addToTileCost)
{
	additionalCost = addToTileCost;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	Gets the additional cost of movement through tile. </summary>
///
/// <remarks>	Tulio, 08/06/2010. </remarks>
///
/// <returns>	The additional cost. </returns>
////////////////////////////////////////////////////////////////////////////////////////////////////

int Tiles::getAdditionalCost()
{
	return additionalCost;
}